//
//  YUStatus.swift
//  YHWeibo
//
//  Created by yuhao.mac on 16/6/27.
//  Copyright © 2016年 yuhao.mac. All rights reserved.
//

import UIKit

class YUStatus: NSObject {
    /// 微博创建时间
    var created_at: String?
    /// 微博ID
    var id: Int64 = 0
    /// 微博信息内容
    var text: String?
    /// 微博来源
    var source: String?
    //用户信息
    var user:YHUser?
    //转发微博
    var retweeted_status:YUStatus?
    //微博配图数组
    var pic_urls:[YHPictureInfo]?
    
    
    //	int	转发数
    var repostsStr: String?
    //	int	评论数
    var commentsStr: String?
    //	int	表态数
    var attitudesStr: String?
    
    //微博发布时间(自定义)
    var creatAtArr: String?{
        return getWbTimeStr(created_at ?? "")
    }
    
    //转发数
    var reposts_count:Int = 0{
        didSet{
            repostsStr = getCountString(reposts_count, title: "转发")
        }
    }
    //	int	评论数
    var comments_count:Int = 0{
        didSet{
            commentsStr = getCountString(comments_count, title: "评论")
        }
    }
    //	int	表态数
    var attitudes_count:Int = 0{
        didSet{
            attitudesStr = getCountString(attitudes_count, title: "赞")
        }
    }
    
    
    
    func getCountString(count: Int,title: String) -> String{
        if count <= 0{
            return title
        }else if count > 0 && count < 10000{
            return "\(count)"
        }else{
            let countF = CGFloat(count / 1000) / 10
            var countStr = "\(countF)"
            if countStr.containsString(".0"){
                countStr = countStr.stringByReplacingOccurrencesOfString(".0", withString: "")
            }
            return "\(countStr)万"
        }
    }
    
    
    init(dict:[String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dict)
    }
    
    override func setValue(value: AnyObject?, forKey key: String) {
        if key == "user"{
            //判断可选值是否存在是否是字典
            guard let v = value as?[String: AnyObject] else{
                print("可选值不存在或不是字典")
                return
            }
            //需要我们自己手动字典转模型
            let u = YHUser(dict: v)
            user = u
        }else if key == "retweeted_status" {
            guard let v = value as?[String: AnyObject] else{
                print("可选值不存在或不是字典")
                return
            }
            let s = YUStatus(dict: v)
            retweeted_status = s
        }else if key == "pic_urls"{
            guard let v = value as?[[String: AnyObject]] else{
                return
            }
            //创建临时数组保存数据
            var tempArr:[YHPictureInfo] = [YHPictureInfo]()
            for dic in v{
                
                let p = YHPictureInfo(dict: dic)
                tempArr.append(p)
            }
            pic_urls = tempArr
        }else{
            super.setValue(value, forKey: key)
        }
    }
    
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
    }
}

extension YUStatus{
    /*
    - 微博时间业务逻辑需求
    - 如果是今年
    - 如果是今天
    -  如果小于60秒 显示格式: 刚刚
    -  如果 s>=60 && s < 60 * 60  显示格式:xx分钟前
    -  如果 s>= 60*60  显示格式: xx小时前
    - 如果是昨天
    -  2016-06-29 12:12:12  显示格式: 昨天 12:12
    - 如果是其他
    -  2016-06-12 13:13:13  显示格式: 06月12日 13:13
    - 如果不是今年
    - 2015-05-05 10:10:10 显示格式: 2015年05月05日 10:10
    */
    //处理微博时间的方法
    func getWbTimeStr(creatAt: String) ->String {
        //时间格式
        let dateF = NSDateFormatter()
        dateF.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
        //设置地区，如果在真机上时间肯能不对，需要我们自己手动设置
        dateF.locale = NSLocale(localeIdentifier: "en_US")
        //微博时间
        let wbDate = dateF.dateFromString(creatAt)!
        
        //判断是否是今年
        let isThisYear:Bool = getWbIsThisYear(wbDate)
        
        if isThisYear {
            //日历类
            let calendar = NSCalendar.currentCalendar()
            
            if calendar.isDateInToday(wbDate){
                let s = NSDate().timeIntervalSinceDate(wbDate)
                if s < 60{
                    return "刚刚"
                }else if s > 60 && s < 60 * 60 {
                    return "\(Int(s/60))分钟前"
                }else{
                    return "\(Int(s/3600))小时前"
                }
            }else if calendar.isDateInYesterday(wbDate){
                dateF.dateFormat = "昨天 HH:mm"
                return dateF.stringFromDate(wbDate)
            }else{
                
                dateF.dateFormat = "MM月dd日 HH:mm"
                return dateF.stringFromDate(wbDate)
            }
            
        }else{
            dateF.dateFormat = "yyyy年MM月dd日 HH:mm"
            let result = dateF.stringFromDate(wbDate)
            return result
        }
        
    }
    
    func getWbIsThisYear(wbDate: NSDate) ->Bool{
        let dateF = NSDateFormatter()
        dateF.locale = NSLocale(localeIdentifier: "en_US")
        dateF.dateFormat = "yyyy"
        let wbTimeStr = dateF.stringFromDate(wbDate)
        let currentTimeStr = dateF.stringFromDate(NSDate())
        if wbTimeStr == currentTimeStr{
            return true
        }else{
            return false
        }
    }
}
